home *** CD-ROM | disk | FTP | other *** search
- #include <a.out.h>
- #include <sys/ptrace.h>
- #include <sys/wait.h>
-
- struct mem_chain
- {
- struct mem_chain *nxt;
- char storage[1];
- };
-
- struct mmu {
- #ifdef PROTECTED
- union {
- struct
- {
- long level1[128];
- long level2[128];
- long level3[128][64];
- } u4;
- struct
- {
- long level2[1024];
- long level3[8][1024];
- } u3;
- } u;
- #endif
- struct exec header;
- struct userregs {
- long save[16];
- long pc;
- unsigned short flags;
- } registers;
- char fd_tab[OPEN_MAX+1];
- struct mmu *parent;
- long result,sbreak;
- long root_parID,crt_parID;
- long maxstack,ticks,old_ticks;
- void *self;
- short pid;
- char state,trace_me;
- struct sigacts *p_sigacts;
- struct mem_chain *storage;
- long stack_limit;
- char *savestack;
- };
-
- enum {maxproc = 64};
-
- struct page_chain
- {
- long free_list[256];
- struct page_chain *nxt;
- long idx;
- char padding[1<<13];
- char pages[(1<<20)-(1<<14)];
- };
-
- extern int debug,virtual;
- extern struct mmu *crp,*proc_tab[maxproc],*swapper;
- extern long mmutype;
- extern long *system_vectors;
- enum {vec_patch_size = 48*sizeof(long)};
-
- extern long activated_pages;
- extern long page_size,old_ticks;
- extern long user_vectors[];
- extern long supervisor_vectors[];
- extern long kInterval;
-
- int newproc(char *name, char **argv, char **envp, struct mmu *parent, long, long);
-
- #ifdef PROTECTED
- int ukmemcpy(struct mmu *crp, long dest, void *src, long siz);
- int kumemcpy(struct mmu *crp, void *dest, long src, long siz);
- long ustrlen(struct mmu *crp, long src);
- int kustrcpy(struct mmu *crp, void *dest, long src);
- int umemset(struct mmu *crp, long dest, char value, long siz);
- int upper_space(struct mmu *crp, long size);
- int lower_space(struct mmu *crp, long size);
- void free_space(struct mmu *crp);
- #define LTP(x) logical_to_physical(crp, x)
- #define CHECK2(crp, addr) if (check2(crp, addr)) return -1
- #else
- #define umemset(crp, dest, value, siz) memset((void *)dest, value, siz)
- #define ukmemcpy(crp, dest, src, siz) memcpy((void *)dest, src, siz)
- #define kumemcpy(crp, dest, src, siz) memcpy(dest, (void *)src, siz)
- #define ustrlen(crp, src) strlen((void *)src)
- #define kustrcpy(crp, dest, src) strcpy((void *)dest, (void *)src)
- #define uumemcpy(crp, parent, dest, src, siz) memcpy((void *)dest, (void *)src, siz)
- #define LTP(x) x
- #define CHECK2(crp, addr)
- #endif
-
- void *xmalloc(size_t siz);
- void *xrealloc(void *, size_t siz);
- char *callname(int sel);
- void system_call(void);
- pascal void trap_patch_68020_0(void);
- pascal void trap_patch_68020_1(unsigned short);
- pascal void trap_patch_68030_0(void);
- pascal void trap_patch_68030_1(unsigned short);
- pascal void trap_patch_68040_0(void);
- pascal void trap_patch_68040_1(unsigned short);
-
- #define extract(y, x) static long y() = {0x4E7A, x}
- #define stuff(y, x) static void y(long) = {0x4E7B, x}
-
- extract(sfc, 0x0000);
- extract(dfc, 0x0001);
- extract(usp, 0x0800);
- extract(vbr, 0x0801);
-
- #pragma parameter put_sfc(__D0)
- stuff(put_sfc, 0x0000);
- #pragma parameter put_dfc(__D0)
- stuff(put_dfc, 0x0001);
- #pragma parameter put_usp(__D0)
- stuff(put_usp, 0x0800);
- #pragma parameter put_msp(__D0)
- stuff(put_msp, 0x0803);
-